“美,是效率的敌人”
TCP /UDP
TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的 传输协议,传输相对可靠,但是由于发送数据之前需要先建立连接(三次握手),所以效率相对较低。
UDP(User Data Protocol)用户数据报协议,是一种无连接的传输协议,传输效率高,但是在传输的过程中可能会出现丢包,可靠性较低。
TCP 的关键字段:
1.seq(序列号):为 TCP 链接中的每个字节赋予一个编号,确保数据的顺序性和完整性.可使接收方重新排序可能乱序到达的数据段,并检测出丢失的段。
2.ack(确认号):用于确认发送端的信息。
3.窗口大小(window size):控制从发送方到接收方的数据量(流控机制),窗口大小可以告诉发送,在发送下一个确认之前,我这边还有能力接收多大的数据。
4.syn:同步序列号,用于建立连接
5.fin:没有更多的数据从发送方传输,用于关闭连接
三次握手的建立过程:
1.第一次握手:客户端发送 SYN 包
客户端设置初始的序列号(seq)为x,并将 SYN 标志位设为 1,表示请求和你建立连接。
seq=x,syn=1
2.第二次握手:服务器响应 SYN-ACK 包
服务器收到了客户端的 syn 包后,会发送自己的 SYN 包作为应答。服务器将自己的初始序列号seq设置为 y,同时发送 ACK 确认,ack确认号为客户端的序列号+1(x+1)
服务器还将 SYN 标志位设为 1,表示同意和你建立连接。
seq=Y,syn=1,ack=X+1
3.第三次握手:客户端发送ack包
客户端收到 SYN-ACK 包后,发送一个 ACK 包做为最后的确认。此 ACK 包的序列号是初始序列号+1(X+1),确认号为服务器的序列号+1(Y+1)。
seq=X+1,ack=Y+1
四次挥手的过程:
1.客户端决定关闭连接,发送 FIN 包给服务器
包构成:序列号seq=x.FIN=1
2.服务器收到 FIN 包后,发送 ACK 包进行回应,该包的 ACK=1, ack确认号为 X+1,表示我已经准备好关闭连接,或准备好了接收客户端的剩余数据。
包构成:ACK=1,ack=X+1
3.服务器完成数据传输后,发送 FIN 包给客户端,标识数据已经处理完毕,希望继续关闭连接。这个 FIN 包带有服务器的序列号 seq=Y,FIN=1
包构成:FIN=1,seq=Y
4.客户端收到服务器的FIN包后,发送一个 ACK 包做为回应,ACK=1,包的确认号为 ack=y+1,表示客户端已经准备好关闭连接。
包构成:ACK=1,ack=Y+1
ps:其实在客户端发送最后一个 FIN 包后,连接并不会立刻断开,客户端会进入time-wait状态,等待足够的时间以确保服务器接收到最后一个 ACK 包。
DNS:域名解析系统 Domain Name System
将输入的域名转换为 IP 地址。
CMD命令:nslookup baidu.com //获取域名后面的 IP 地址
正向解析:将域名解析为 IP 地址
反向解析: 将 IP 地址解析为域名
FQDN:完全合格的主机名。
站点:WWW(World Wide Web)
域名:baidu.com
顶级域: .com
当我们在浏览器的 URL 地址栏里输入www.baidu.com并回车后,到底发生了什么?
1.浏览器从自己缓存中查看是有由 DNS 记录,有的话直接解析完成。
2.查操作系统的缓存(hosts),有的话,则解析完成
3.查路由器的缓存,有的话,则解析完成。
4.会向电脑自己配置的 运营商的服务器发起请求,解析完成。
5.如果运营商服务器内没有解析结果,则会向根 DNS 服务器进行查询。根服务器是顶级的 DNS 服务器,负责将请求定向到负责管理特定顶级域名的 DNS 服务器
6.顶级域服务器将请求重定向到负责.com的DNS 服务器,该服务器再次查找,并将这个或重定向到负责baidu.com的权威 DNS 服务器
7.权威 DNS 服务器是域名的注册机构维护的,负责存储baidu.com的所有 DNS 记录,该记录会直接返还给运营商服务器
8.运营商服务器终于告诉了你baidu.com的 IP 地址是 x.x.x.x
DNS 服务器的两种查询方式:
1.递归查询:客户机向 DNS 服务器发出请求后,DNS 若本身不能解析,则会向其他服务器发出查询请求,得到结果后转交给客户机(跑腿服务)
2.迭代查询:一般用于 DNS 服务器与服务器之间,当客户机发送查询请求后,DNS 服务器一般不会直接回复查询结果,而是告诉客户机另一台 DNS 服务器地址,依次循环,直到查询出结果,这种方式称之为迭代(踢皮球)
FTP 协议
FTP文件传输协议,是使用最广泛的文件传输协议。使用 TCP 的 20 和 21 端口
FTP 分为两种数据连接模式,分别是主动模式(Active)和被动模式(Passive)
主动模式:
主动模式的问题在于,如果客户端在内网(有防火墙保护),那么服务器尝试建立到客户端的数据连接可能会被阻止。
被动连接
由于所有的连接都是由客户端发起的,它更容易通过客户端的防火墙或路由器,特别是在客户端网络限制进入连接时。这使得被动模式成为了许多现代FTP应用的首选模式。
TELNET远程实验:

R1 配置:
<R1>system-view
[R1]interface g0/0/0
[R1-G0/0/0]ip address 192.168.1.1 24
[R1-G0/0/0]quit
[R1]sysname Clay1 //将主机命名为CLay1
<R1>telnet 192.168.1.2 //验证能否远程成功
R2 配置:
R2:
<R2>system-view
[R2]interface g0/0/0
[R2-G0/0/0]ip address 192.168.1.2 24
[R2-G0/0/0]quit
[R2]sysname Clay2 //将主机命名为R2
[R2]user-interface vty 0 4 //进入虚拟终端,0 4代表最多有5个人可以同时进入这个虚拟终端
[R2-VTY-0 4]authentication-mode password //开启密码认证
please configure the login password (max length 16):admin //设置密码为admin
[R2-VTY-0 4]protocol inbound all //允许所有协议入站
[R2-VTY-0 4]user privilege level 15 //将权限调为15(范围是0-15),数值越高,权限越大
3A 配置命令(被控制端)
[R2]AAA //进入 3A 认证配置视图
[R2-AAA]Local-user clay1 password simple 123456 //创建一个用户叫 CLay1,密码为明文的 123456
[R2-AAA]Local-user clay1 privilege level 15 //给该用户赋予权限
[R2-AAA]Local-user clay1 service-type telnet //允许该用户访问 telnet 服务
[R2-AAA]quit
[R2]user-interface vty 0 4 //进入虚拟终端
[R2-VTY-0 4]authentication-mode AAA // 认证方式更改为 3A 认证(Accounting 记账、Authentication认证、Authorization授权)
3A 配置命令(控制端)
telnet 192.168.1.10. //尝试远程